# 定义变量
# OBJS:=hello.o main.o
# OBJS := hello.o
# OBJS += main.o
OBJS := hello.o \
		main.o

# 定义目标
# 目标名：前置依赖文件1 依赖文件2 ...
# 	命令1
# 	命令2
# 	...

main.o: main.c hello.h
	gcc -c main.c -o main.o

hello.o: hello.c
	gcc -c hello.c -o hello.o

main: $(OBJS)
	gcc $(OBJS) -o main

# 声明伪目标
.PHONY: clean

clean:
	-rm hello.o
	-rm main.o
	-rm main
# 如果当前命令执行失败，默认后面命令就不会再执行
# 如果希望当前命令执行失败，后面命令还会执行 =》 忽略错误 =》在命令左侧加一个-
clean2:
	-rm hello.o
	rm main.o
	rm main

# 如果目标名与生成文件名不一致的问题：每次执行目标，即使没有任何变化都会执行命令
main2: $(OBJS)
	gcc $(OBJS) -o main